local nl = require'luaNumeric'
require 'luaFDTD3D'
local plot = require "Q2DViewerEx"

----------------------------------------------------------------------------------------------------------------------------------------
--初始化参数
local LoadDataPost={
	funs = {};
	xAxis = 0;
	ytype = 1;
	xtype = 1;
};
----------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------
--创建表和创建元表
function LoadDataPost:new (o)
	o = o or {};
	self.__index = self;
	setmetatable(o,self)
	o:init();
	return o;
end
----------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------
--创建表和创建元表
function LoadDataPost:init ()
	self.funs = {};
	self.funs.abs = function(input) return nl.abs(input); end;
	self.funs.phs = function(input) return nl.arg(input)*180/pi; end;
	self.funs.real = function(input) return nl.real(input); end;
	self.funs.imag = function(input) return nl.imag(input); end;
	self.funs.log = function(input) 
		local  d = nl.abs(input);
		d = 20* nl.log10(d)
		return d; 
	end;
	self.fun_names = {};
	self.fun_names[1] = 'log';
	self.fun_names[2] = 'abs';
	self.fun_names[3] = 'phs';
	self.fun_names[4] = 'real';
	self.fun_names[5] = 'imag';	
	self.ytype = 1;
end
----------------------------------------------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------------------------------------------
--更新数据
function LoadDataPost:refresh_figs ()
	self.probe:update();
	self.results = self.probe:results();
	self:plot()
end
----------------------------------------------------------------------------------------------------------------------------------------

---==================================================================================================---
--添加二维视图
function LoadDataPost:get_view_list(list)
	for k,v in pairs (Gallop.View.view2Ds) do
		list:add(k);
	end
end
---==================================================================================================---

---==================================================================================================---
--添加二维视图
function LoadDataPost:add_view()
	self.view2d=Gallop.View:create_view2D();
	--self:update_view_list_to_ui();
end
---==================================================================================================---

---==================================================================================================---
--选择二维视图
function LoadDataPost:select_view(name)
	self.view2d=Gallop.View:select_active_view();
end
---==================================================================================================---

---==================================================================================================---
--清楚二维视图
function LoadDataPost:clear_curves()
	assert(self.view2d, "You should creat or select a viewer first" )
	self.view2d:clearGraphs()
	self.view2d:rescaleAxes();
end
---==================================================================================================---

---==================================================================================================---
--画图: 三维标量场
function LoadDataPost:plot_3d_scalarfields(data,valid, strs)
	local ncols = #data;
	for ii=4,ncols do 
		local fields = Geometry.NewTrigScalarFields3D();
		fields:insert( data[1],data[2],data[3],data[ii], valid[1],valid[2],valid[3],valid[ii],strs[ii]);		
		Geometry.AddShape(fields);
	end
end
---==================================================================================================---

---==================================================================================================---
--画图: 二维标量场
function LoadDataPost:plot_2d_scalarfields(data,valid, strs)
	local ncols = #data;
	for ii=3,ncols do 
		local fields = Geometry.NewTrigScalarFields2D();
		fields:insert_array( data[1],data[2],data[ii], valid[1],valid[2],valid[ii],strs[ii]);	
		fields:render_coordinate(1)
		Geometry.AddShape(fields);
	end
end
---==================================================================================================---


---==================================================================================================---
--画图: 二维标量方向图场
function LoadDataPost:plot_2d_scalarfields_in_spherical_coordinate(data,valid, strs)
	local ncols = #data;
	for ii=3,ncols do 
		local fields = Geometry.NewTrigScalarFields2D();
		fields:insert_array( data[1],data[2],data[ii], valid[1],valid[2],valid[ii],strs[ii]);	
		Geometry.AddShape(fields);
	end
end
---==================================================================================================---


function LoadDataPost:set_axis()
	if self.xtype ==2 then
		self.view.xAxis:setProperty( {name="波长 ["..Geometry.ref_units_dim_str()..']'} )
	else
		self.view.xAxis:setProperty( {name="频率 ["..Geometry.ref_units_freq_str()..']'} )
	end
	 self.view.yAxis:setProperty( {name="S parameter"} )
	 self.view:rescaleAxes();
end

return LoadDataPost;
